package cl.tinet.trainee.ejb;

import java.util.List;

import javax.ejb.Local;

import cl.tinet.trainee.model.CarroTO;
import cl.tinet.trainee.model.DatosMostrarTO;
import cl.tinet.trainee.model.DetalleCarroTO;
import cl.tinet.trainee.model.ProductoTO;
import cl.tinet.trainee.model.UsuarioTO;

@Local
public interface CarroBeanLocal {

	/**
	 * Metodo encargado de listar todos los productos que tengan stock mayor a 0
	 * @return lista de productos
	 */
	public List<ProductoTO> listarProductos();
	
	/**
	 * Metodo encargado de agregar un producto al carro de compras
	 * @return un objeto de tipo DatosMostrarTO
	 */
	public DatosMostrarTO agregarProducto(ProductoTO productoTO);
	
	/**
	 * Metodo encargado de restar en uno el stock del producto
	 * @param productoTO
	 */	
	public void descontarStock(ProductoTO productoTO);
	
	/**
	 * Metodo encargado de cargar el carro de compras 
	 * @return
	 */
    public CarroTO cargarCarro();
		    
	/**
	 * Metodo que calcula cantidad de productos y monto total del carro
	 * @param lDetalleCarroTO
	 * @return objeto de tipo  DatosMostrarTO
	 */	
	public DatosMostrarTO calcularDatosParaMostrar(List<DetalleCarroTO> lDetalleCarroTO);
	
	/**
	 * Metodo encargado de verificar si el usuario se encuentra registrado en la
	 * base de datos
	 * 
	 * @param usuarioTO
	 * @return objeto del tipo usuarioTO
	 */
	public UsuarioTO identificarUsuario(UsuarioTO usuarioTO);	
	
	/**
	 * Metodo encargado de modificar el carro
	 */
	public CarroTO editarCarro(CarroTO carroTO);
	
	/**
	 * Metodo encargado de aumentar en 1(+1) la cantidad de un producto
	 * @param detalleCarroTO	
	 */
	public void agregarCantidad(DetalleCarroTO detalleCarroTO);
	
	/**
	 * Metodo encargado de restar en 1(-1) la cantidad de un producto
	 * @param detalleCarroTO
	 * @return objeto de tipo carro
	 */
	public CarroTO restarCantidad(DetalleCarroTO detalleCarroTO);
	
	
	/**
	 * Metodo encargado de eliminar un detalle de carro
	 */
	public void eliminarDetalle(DetalleCarroTO detalleCarroTO);
		

	/**
	 * Metodo encargado de actualizar un detalle
	 * @param detalleCarroTO
	 */
	public void actualizarDetalle(DetalleCarroTO detalleCarroTO);
	
	

}
	

